#include "all.h"
/************以下是根据FreeCars2.0协议修正的，用户无需改变**************/
uint8_t uSendBuf[UartDataNum*2]={0};
uint8_t FreeCarsDataNum=UartDataNum*2;


double UartData[9] = {0};//上位机的9个通道
SerialPortType SerialPortRx;
/*
向某个通道缓冲区填充数据
chanel：通道
data  ：数据0~32767
*/
void push(uint8_t chanel,uint16_t data)
{
    uSendBuf[chanel*2]=data/256;
    uSendBuf[chanel*2+1]=data%256;
}


/*
轮询法发送一帧数据
消耗时间与数据长度有关
不可以放在中断里面周期性调用
消耗时间计算看帮助文档
*/
void sendDataToScope(void)
{
  uint8_t i,sum=0;
  //使用轮询的方式发送数据，当数据未发送，程序停在此处直到发送完成
   R_SCI1_Serial_Send_Char(251);     //使用了拉普兰德函数
   R_SCI1_Serial_Send_Char(109);
   R_SCI1_Serial_Send_Char(37);
  sum+=(251);      //全部数据加入校验
  sum+=(109);
  sum+=(37);
  for(i=0;i<FreeCarsDataNum;i++)
  {
    R_SCI1_Serial_Send_Char(uSendBuf[i]);
    sum+=uSendBuf[i];         //全部数据加入校验
  }
  R_SCI1_Serial_Send_Char(sum);//这个地方采用了拉普兰德的字符发送函数2
}

void uart0_isr(void)//接收中断
{
if(Bluetooch_Useway == 1)
{

      int i,b,d1;
      uint32_t d;

      //if((UART_S1_REG(UART0) & UART_S1_RDRF_MASK))//是接收中断
      {
       SerialPortRx.Data = gp_sci1_rx_address_temp;

        if( SerialPortRx.Stack < UartRxBufferLen )
        {
          SerialPortRx.Buffer[SerialPortRx.Stack++] = SerialPortRx.Data;

          if(   SerialPortRx.Stack >= UartRxDataLen  //UartRxDataLen个数为一帧
             && SerialPortRx.Buffer[SerialPortRx.Stack - UartRxDataLen]  ==0xff //校验字头
               && SerialPortRx.Buffer[SerialPortRx.Stack - UartRxDataLen+1]==0x55
                 && SerialPortRx.Buffer[SerialPortRx.Stack - UartRxDataLen+2]==0xaa
                   && SerialPortRx.Buffer[SerialPortRx.Stack - UartRxDataLen+3]==0x10 )
          {   //double data 9个通道数据校验
            SerialPortRx.Check = 0;
            b = SerialPortRx.Stack - UartRxDataLen; //起始位
            for(i=b; i<SerialPortRx.Stack-1; i++)  //除校验位外的位进行校验
            {
              SerialPortRx.Check += SerialPortRx.Buffer[i];//校验
            }

            if( SerialPortRx.Check == SerialPortRx.Buffer[SerialPortRx.Stack-1] )
            {   //校验成功，进行数据解算
              for(i = 0; i<9; i++)
              {
                d = SerialPortRx.Buffer[b+i*4+4]*0x1000000L + SerialPortRx.Buffer[b+i*4+5]*0x10000L + SerialPortRx.Buffer[b+i*4+6]*0x100L + SerialPortRx.Buffer[b+i*4+7];
                if(d>0x7FFFFFFF)
                {
                  d1 = 0x7FFFFFFF - d;
                }
                else
                {
                  d1 = d;
                }
                UartData[i]=d1;
                UartData[i]/=65536.0;
              }
              UartDebug();  //转去处理，把受到的数据付给变量
            }
            SerialPortRx.Stack = 0;
          }
          else if(   SerialPortRx.Stack >= UartRxCmdLen //UartRxDataLen个数为一帧
                  && SerialPortRx.Buffer[SerialPortRx.Stack - UartRxCmdLen]  ==0xff
                    && SerialPortRx.Buffer[SerialPortRx.Stack - UartRxCmdLen+1]==0x55
                      && SerialPortRx.Buffer[SerialPortRx.Stack - UartRxCmdLen+2]==0xaa
                        && SerialPortRx.Buffer[SerialPortRx.Stack - UartRxCmdLen+3]==0x77 )//cmd
          {
            SerialPortRx.Check = 0;
            b = SerialPortRx.Stack - UartRxCmdLen; //起始位
            for(i=b; i<SerialPortRx.Stack-1; i++)  //除校验位外的位进行校验
            {
              SerialPortRx.Check += SerialPortRx.Buffer[i];//校验
            }
            if( SerialPortRx.Check == SerialPortRx.Buffer[SerialPortRx.Stack-1] )
            {   //校验成功
              //UartCmd(UartCmdNum,UartCmdData);//处理接收到的命令，付给MCU命令变量
            }
            SerialPortRx.Stack = 0;
          }
        }
        else
        {
          SerialPortRx.Stack = 0;
        }
      }

}
else
{

}

}



/*****发送一副图片给上位机开始*****/
void Send_ov77(void)
{
  //uint16_t i,j;
  R_SCI1_Serial_Send_Char(0xFF);//FF,FE,FF,FE四个输表示一副图像的开始
  R_SCI1_Serial_Send_Char(0xFE);
  R_SCI1_Serial_Send_Char(0xFF);
  R_SCI1_Serial_Send_Char(0xFE);
//
//  for(i = 0;i < Ov77_H;i++)
//  {
//    for(j =0;j < Ov77_W;j++)
//    {
//      uint8_t d =Ov77_Image[i][j];
//      if(d > 0xFD) d = 0xFD;            //避开校验位
//      R_SCI1_Serial_Send_Char(d);
//    }
//    R_SCI1_Serial_Send_Char(0xFE);//FE,FE 2个数表示换行
//    R_SCI1_Serial_Send_Char(0xFE);
//  }
}
/*****发送一副图片给上位机结束*****/
